Machine Learning টেনসর Indexing, Slicing, এবং Broadcasting গাইড ও নোট

317

PyTorch একটি শক্তিশালী লাইব্রেরি যা টেনসর ডাটা স্ট্রাকচার ব্যবহার করে। টেনসরের সাথে কাজ করার সময়, Indexing, Slicing, এবং Broadcasting গুরুত্বপূর্ণ কৌশল যা ডেটা ম্যানিপুলেশন এবং অপারেশনকে সহজ এবং কার্যকরী করে তোলে।

এখানে Indexing, Slicing, এবং Broadcasting এর বিস্তারিত আলোচনা করা হলো:


১. Indexing

Indexing হল একটি নির্দিষ্ট উপাদান বা মান সংগ্রহ করার পদ্ধতি। PyTorch তে টেনসরের মধ্যে ডেটা অ্যাক্সেস করার জন্য সাধারণত একইভাবে Python এর লিস্ট এর মতো 0-based indexing ব্যবহার করা হয়।

উদাহরণ:

import torch

# একটি 1D টেনসর তৈরি করা
tensor_1d = torch.tensor([1, 2, 3, 4, 5])

# প্রথম উপাদান অ্যাক্সেস করা (Index 0)
print(tensor_1d[0])  # আউটপুট: 1

# পঞ্চম উপাদান অ্যাক্সেস করা (Index 4)
print(tensor_1d[4])  # আউটপুট: 5

Negative Indexing: Negative indexing ব্যবহার করে আপনি টেনসরের শেষ থেকে উপাদানগুলো অ্যাক্সেস করতে পারেন।

print(tensor_1d[-1])  # আউটপুট: 5 (শেষ উপাদান)
print(tensor_1d[-2])  # আউটপুট: 4 (পূর্ববর্তী উপাদান)

২. Slicing

Slicing ব্যবহার করে একটি টেনসর থেকে নির্দিষ্ট অংশ বা সাবটেনসর বের করা হয়। এটি Python এর লিস্টের slicing এর মতো কাজ করে।

উদাহরণ:

import torch

# একটি 1D টেনসর তৈরি করা
tensor_1d = torch.tensor([1, 2, 3, 4, 5])

# প্রথম 3 উপাদান স্লাইস করা
print(tensor_1d[:3])  # আউটপুট: tensor([1, 2, 3])

# 2 থেকে 4 ইনডেক্স পর্যন্ত উপাদান স্লাইস করা
print(tensor_1d[2:5])  # আউটপুট: tensor([3, 4, 5])

# প্রতি দ্বিতীয় উপাদান স্লাইস করা
print(tensor_1d[::2])  # আউটপুট: tensor([1, 3, 5])

Slicing for Multidimensional Tensors: মাল্টিডাইমেনশনাল টেনসরের ক্ষেত্রেও slicing ব্যবহার করা যায়। উদাহরণস্বরূপ, একটি 2D টেনসরে slicing করা:

# 2D টেনসর তৈরি করা
tensor_2d = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# প্রথম দুই সারি এবং প্রথম দুই কলাম স্লাইস করা
print(tensor_2d[:2, :2])  # আউটপুট: tensor([[1, 2], [4, 5]])

# প্রথম সারি এবং সমস্ত কলাম স্লাইস করা
print(tensor_2d[0, :])  # আউটপুট: tensor([1, 2, 3])

৩. Broadcasting

Broadcasting হল একটি টেনসর অপারেশন কৌশল যা smaller টেনসরের আকার larger টেনসরের সাথে মানানসই করতে ব্যবহৃত হয়। এটি একে অপরের সাথে মানানসই হতে পারে, যেমন একটি scalar মানকে একটি 2D টেনসরের সাথে অপারেট করা।

PyTorch স্বয়ংক্রিয়ভাবে ছোট টেনসরগুলিকে বড় টেনসরের আকারের সাথে "ব্রডকাস্ট" করে, যাতে অপারেশন সঠিকভাবে কাজ করে।

উদাহরণ:

import torch

# একটি 2D টেনসর তৈরি করা
tensor_2d = torch.tensor([[1, 2], [3, 4]])

# একটি scalar মান যোগ করা
result = tensor_2d + 5
print(result)  # আউটপুট: tensor([[6, 7], [8, 9]])

# একটি 1D টেনসর যোগ করা
tensor_1d = torch.tensor([1, 2])
result = tensor_2d + tensor_1d
print(result)  # আউটপুট: tensor([[2, 4], [4, 6]])

# Broadcasting ঘটে: tensor_1d কে 2D টেনসরের আকারে প্রসারিত করা হয়

এখানে, tensor_1d এর উপাদানগুলো tensor_2d এর প্রতিটি সারির সাথে যুক্ত হয়। এটি broadcasting এর মাধ্যমে ঘটে, যেখানে ছোট আকারের টেনসরটি বড় টেনসরের আকারের সাথে সঙ্গতিপূর্ণ হতে প্রসারিত হয়।

Broadcasting নিয়ম:

  1. দুটি টেনসরের আকৃতি যদি একে অপরকে সমর্থন করে, তবে সেই দুটি টেনসরের মধ্যে broadcasting সম্ভব।
  2. ছোট টেনসরের আকার যদি বড় টেনসরের আকারের সাথে মানানসই না হয়, তবে সেটি সঠিকভাবে কাজ করবে না এবং একটি ত্রুটি তৈরি হবে।

সারাংশ

  • Indexing: টেনসরের নির্দিষ্ট উপাদান অ্যাক্সেস করতে ব্যবহৃত হয়। এটি 0-based indexing ব্যবহার করে।
  • Slicing: টেনসরের একটি অংশ বা সাবটেনসর অ্যাক্সেস করতে ব্যবহৃত হয়। এটি Python এর লিস্ট slicing এর মতো কাজ করে।
  • Broadcasting: ছোট আকারের টেনসরকে বড় আকারের টেনসরের সাথে অটোমেটিকভাবে মানানসই করতে ব্যবহৃত হয়, যাতে অপারেশনগুলো সঠিকভাবে কার্যকর হয়।

এই কৌশলগুলি PyTorch এর টেনসর ম্যানিপুলেশন এবং অপারেশন করার ক্ষেত্রে খুবই কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...